import RouterView from './components/router-view';
import RouterLink from './components/router-link';

export let _Vue;
export function install (Vue, options) {
  _Vue = Vue;
  // 所有子组件都有一个 $route 和 $router 属性，使用 mixin 方式混合, 所有组件再初始化时都会调 Vue.extend 方法，将根组件的 mixins 合并；
  Vue.mixin ({
    beforeCreate () {
      // 有 $options.rouet 就是根实例
      if (this.$options.router) {
        this._rooterRoot = this; // 或者用 $root
        this._router = this.$options.router;
        console.log ('_router===', this._router);
        this._router.init (this);

        // this._router.history.current 为当前路由
        // 给 vm 实例添加属性 _route ，并且将当前路由变为响应式
        Vue.util.defineReactive (this, '_route', this._router.history.current);
        console.log ('=========', this._route);
      } else {
        // 非根实例就向上找
        this._rooterRoot = this.$parent && this.$parent._rooterRoot;
      }
    },
  });
  Object.defineProperty (Vue.prototype, '$route', {
    get () {
      return this._rooterRoot._route; // current 对象，当前路由, path, matched 等属性
    },
  });
  Object.defineProperty (Vue.prototype, '$router', {
    get () {
      return this._rooterRoot._router; // addRoutes, match 等方法
    },
  });

  // 注册全局组件
  Vue.component ('router-view', RouterView);
  Vue.component ('router-link', RouterLink);
}
